package cn.tedu.v1_1;
/**
 * 聊天室Version1.1
 * 功能：服务器端启动【申请：端口号】--客户端连接服务器【IP+端口】
 *完成哪些功能：
 * 1.Server端：私有化服务器端通讯类：ServerSocket
 * 2.Server端：申请端口号 6666，主动抛出IO异常，主动异常BindException
 * 3.Server端：start()  启动 服务器端，做两件事情：
 *                     ①accept()  等待客户端的通讯，返回一个客户端Socket
 *                                 卡住：等客户端连接，一旦连接成功，打桩输出
 *                     ②IO流---读取操作---客户端发出文本
 *
 *新增什么功能：
 */


import java.io.*;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket serverSocket;
    public Server(){
        try{
             serverSocket=new ServerSocket(5656);
        } catch(BindException e){
             System.out.println("端口号重复创建");
        } catch (IOException e){
             System.out.println("申请端口号失败...");
        }
    }
    public void start() {
        //1.置空流---目的：赋值、关闭流
         BufferedReader br = null;
         try {
             //三行：等待客户端通讯
             System.out.println("-----等待客户端连接-----");
             Socket socket = serverSocket.accept();
             System.out.println("一个客户端连接成功了");
             //连接成功--IO流操作
             InputStream is = socket.getInputStream();
             InputStreamReader isr =
                     new InputStreamReader(is, "UTF8");

              br=new BufferedReader(isr);
             String str = null;
             while (true) {
                 str = br.readLine();
                 System.out.println("客户端说的话：" + str);
             }
        }  catch (NullPointerException e) {
             System.out.println("IO流传输对象，" +
                     "有对象为null,立马核对，" +
                    "建议：查看try块中对象可能赋值为null");
        }  catch (UnsupportedEncodingException e) {
            System.out.println("客户端或服务器端：字符集不一致");
        }  catch (IOException e) {
            System.out.println("通讯过程当中，传输出现错误！");
        }  finally {   //一定会执行代码：关闭流
             if (br != null)
                try {
                     br.close();
                }  catch (IOException e) {
                    System.out.println("结束通讯：关闭失败！");
                }
        }

    }
    //参考 Server  捕获打印异常信息方法===Client   异常处理

    public static void main(String[] args) throws IOException {

        Server server=new Server();
        server.start();
    }
}

